{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# MNIST Classifier\n",
    "\n",
    "This notebook prepares an MNIST classifier using a Convolutional Neural Network (CNN)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# import required libs\n",
    "import keras\n",
    "import numpy as np\n",
    "from keras import backend as K\n",
    "from keras.datasets import mnist\n",
    "from keras.models import Sequential\n",
    "from keras.layers import Dense, Dropout, Flatten\n",
    "from keras.layers import Conv2D, MaxPooling2D\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "params = {'legend.fontsize': 'x-large',\n",
    "          'figure.figsize': (15, 5),\n",
    "         'axes.labelsize': 'x-large',\n",
    "         'axes.titlesize':'x-large',\n",
    "         'xtick.labelsize':'x-large',\n",
    "         'ytick.labelsize':'x-large'}\n",
    "\n",
    "plt.rcParams.update(params)\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Set Parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "batch_size = 128\n",
    "num_classes = 10\n",
    "epochs = 2\n",
    "\n",
    "# input image dimensions\n",
    "img_rows, img_cols = 28, 28"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Get MNIST Dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# the data, shuffled and split between train and test sets\n",
    "(x_train, y_train), (x_test, y_test) = mnist.load_data()\n",
    "\n",
    "if K.image_data_format() == 'channels_first':\n",
    "    x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)\n",
    "    x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)\n",
    "    input_shape = (1, img_rows, img_cols)\n",
    "else:\n",
    "    x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)\n",
    "    x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)\n",
    "    input_shape = (img_rows, img_cols, 1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Pre-process image data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x_train shape: (60000, 28, 28, 1)\n",
      "60000 train samples\n",
      "10000 test samples\n"
     ]
    }
   ],
   "source": [
    "x_train = x_train.astype('float32')\n",
    "x_test = x_test.astype('float32')\n",
    "x_train /= 255\n",
    "x_test /= 255\n",
    "print('x_train shape:', x_train.shape)\n",
    "print(x_train.shape[0], 'train samples')\n",
    "print(x_test.shape[0], 'test samples')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# convert class vectors to binary class matrices\n",
    "y_train = keras.utils.to_categorical(y_train, num_classes)\n",
    "y_test = keras.utils.to_categorical(y_test, num_classes)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Build a CNN based deep neural network"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "model = Sequential()\n",
    "model.add(Conv2D(32, kernel_size=(3, 3),\n",
    "                 activation='relu',\n",
    "                 input_shape=input_shape))\n",
    "model.add(Conv2D(64, (3, 3), activation='relu'))\n",
    "model.add(MaxPooling2D(pool_size=(2, 2)))\n",
    "model.add(Dropout(0.25))\n",
    "model.add(Flatten())\n",
    "model.add(Dense(128, activation='relu'))\n",
    "model.add(Dropout(0.5))\n",
    "model.add(Dense(num_classes, activation='softmax'))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Visualize the network architecture"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg height=\"719pt\" viewBox=\"0.00 0.00 392.00 719.00\" width=\"392pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g class=\"graph\" id=\"graph0\" transform=\"scale(1 1) rotate(0) translate(4 715)\">\n",
       "<title>G</title>\n",
       "<polygon fill=\"white\" points=\"-4,4 -4,-715 388,-715 388,4 -4,4\" stroke=\"none\"/>\n",
       "<!-- 2423172178272 -->\n",
       "<g class=\"node\" id=\"node1\"><title>2423172178272</title>\n",
       "<polygon fill=\"none\" points=\"20,-664.5 20,-710.5 364,-710.5 364,-664.5 20,-664.5\" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"108\" y=\"-683.8\">conv2d_1_input: InputLayer</text>\n",
       "<polyline fill=\"none\" points=\"196,-664.5 196,-710.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"224\" y=\"-695.3\">input:</text>\n",
       "<polyline fill=\"none\" points=\"196,-687.5 252,-687.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"224\" y=\"-672.3\">output:</text>\n",
       "<polyline fill=\"none\" points=\"252,-664.5 252,-710.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"308\" y=\"-695.3\">(None, 28, 28, 1)</text>\n",
       "<polyline fill=\"none\" points=\"252,-687.5 364,-687.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"308\" y=\"-672.3\">(None, 28, 28, 1)</text>\n",
       "</g>\n",
       "<!-- 2423083090832 -->\n",
       "<g class=\"node\" id=\"node2\"><title>2423083090832</title>\n",
       "<polygon fill=\"none\" points=\"41,-581.5 41,-627.5 343,-627.5 343,-581.5 41,-581.5\" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"104.5\" y=\"-600.8\">conv2d_1: Conv2D</text>\n",
       "<polyline fill=\"none\" points=\"168,-581.5 168,-627.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"196\" y=\"-612.3\">input:</text>\n",
       "<polyline fill=\"none\" points=\"168,-604.5 224,-604.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"196\" y=\"-589.3\">output:</text>\n",
       "<polyline fill=\"none\" points=\"224,-581.5 224,-627.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"283.5\" y=\"-612.3\">(None, 28, 28, 1)</text>\n",
       "<polyline fill=\"none\" points=\"224,-604.5 343,-604.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"283.5\" y=\"-589.3\">(None, 26, 26, 32)</text>\n",
       "</g>\n",
       "<!-- 2423172178272&#45;&gt;2423083090832 -->\n",
       "<g class=\"edge\" id=\"edge1\"><title>2423172178272-&gt;2423083090832</title>\n",
       "<path d=\"M192,-664.366C192,-656.152 192,-646.658 192,-637.725\" fill=\"none\" stroke=\"black\"/>\n",
       "<polygon fill=\"black\" points=\"195.5,-637.607 192,-627.607 188.5,-637.607 195.5,-637.607\" stroke=\"black\"/>\n",
       "</g>\n",
       "<!-- 2423172178216 -->\n",
       "<g class=\"node\" id=\"node3\"><title>2423172178216</title>\n",
       "<polygon fill=\"none\" points=\"41,-498.5 41,-544.5 343,-544.5 343,-498.5 41,-498.5\" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"104.5\" y=\"-517.8\">conv2d_2: Conv2D</text>\n",
       "<polyline fill=\"none\" points=\"168,-498.5 168,-544.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"196\" y=\"-529.3\">input:</text>\n",
       "<polyline fill=\"none\" points=\"168,-521.5 224,-521.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"196\" y=\"-506.3\">output:</text>\n",
       "<polyline fill=\"none\" points=\"224,-498.5 224,-544.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"283.5\" y=\"-529.3\">(None, 26, 26, 32)</text>\n",
       "<polyline fill=\"none\" points=\"224,-521.5 343,-521.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"283.5\" y=\"-506.3\">(None, 24, 24, 64)</text>\n",
       "</g>\n",
       "<!-- 2423083090832&#45;&gt;2423172178216 -->\n",
       "<g class=\"edge\" id=\"edge2\"><title>2423083090832-&gt;2423172178216</title>\n",
       "<path d=\"M192,-581.366C192,-573.152 192,-563.658 192,-554.725\" fill=\"none\" stroke=\"black\"/>\n",
       "<polygon fill=\"black\" points=\"195.5,-554.607 192,-544.607 188.5,-554.607 195.5,-554.607\" stroke=\"black\"/>\n",
       "</g>\n",
       "<!-- 2423208667512 -->\n",
       "<g class=\"node\" id=\"node4\"><title>2423208667512</title>\n",
       "<polygon fill=\"none\" points=\"0,-415.5 0,-461.5 384,-461.5 384,-415.5 0,-415.5\" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"104.5\" y=\"-434.8\">max_pooling2d_1: MaxPooling2D</text>\n",
       "<polyline fill=\"none\" points=\"209,-415.5 209,-461.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"237\" y=\"-446.3\">input:</text>\n",
       "<polyline fill=\"none\" points=\"209,-438.5 265,-438.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"237\" y=\"-423.3\">output:</text>\n",
       "<polyline fill=\"none\" points=\"265,-415.5 265,-461.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"324.5\" y=\"-446.3\">(None, 24, 24, 64)</text>\n",
       "<polyline fill=\"none\" points=\"265,-438.5 384,-438.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"324.5\" y=\"-423.3\">(None, 12, 12, 64)</text>\n",
       "</g>\n",
       "<!-- 2423172178216&#45;&gt;2423208667512 -->\n",
       "<g class=\"edge\" id=\"edge3\"><title>2423172178216-&gt;2423208667512</title>\n",
       "<path d=\"M192,-498.366C192,-490.152 192,-480.658 192,-471.725\" fill=\"none\" stroke=\"black\"/>\n",
       "<polygon fill=\"black\" points=\"195.5,-471.607 192,-461.607 188.5,-471.607 195.5,-471.607\" stroke=\"black\"/>\n",
       "</g>\n",
       "<!-- 2423172178552 -->\n",
       "<g class=\"node\" id=\"node5\"><title>2423172178552</title>\n",
       "<polygon fill=\"none\" points=\"39.5,-332.5 39.5,-378.5 344.5,-378.5 344.5,-332.5 39.5,-332.5\" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"104.5\" y=\"-351.8\">dropout_1: Dropout</text>\n",
       "<polyline fill=\"none\" points=\"169.5,-332.5 169.5,-378.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"197.5\" y=\"-363.3\">input:</text>\n",
       "<polyline fill=\"none\" points=\"169.5,-355.5 225.5,-355.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"197.5\" y=\"-340.3\">output:</text>\n",
       "<polyline fill=\"none\" points=\"225.5,-332.5 225.5,-378.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"285\" y=\"-363.3\">(None, 12, 12, 64)</text>\n",
       "<polyline fill=\"none\" points=\"225.5,-355.5 344.5,-355.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"285\" y=\"-340.3\">(None, 12, 12, 64)</text>\n",
       "</g>\n",
       "<!-- 2423208667512&#45;&gt;2423172178552 -->\n",
       "<g class=\"edge\" id=\"edge4\"><title>2423208667512-&gt;2423172178552</title>\n",
       "<path d=\"M192,-415.366C192,-407.152 192,-397.658 192,-388.725\" fill=\"none\" stroke=\"black\"/>\n",
       "<polygon fill=\"black\" points=\"195.5,-388.607 192,-378.607 188.5,-388.607 195.5,-388.607\" stroke=\"black\"/>\n",
       "</g>\n",
       "<!-- 2423208852448 -->\n",
       "<g class=\"node\" id=\"node6\"><title>2423208852448</title>\n",
       "<polygon fill=\"none\" points=\"50,-249.5 50,-295.5 334,-295.5 334,-249.5 50,-249.5\" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"104.5\" y=\"-268.8\">flatten_1: Flatten</text>\n",
       "<polyline fill=\"none\" points=\"159,-249.5 159,-295.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"187\" y=\"-280.3\">input:</text>\n",
       "<polyline fill=\"none\" points=\"159,-272.5 215,-272.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"187\" y=\"-257.3\">output:</text>\n",
       "<polyline fill=\"none\" points=\"215,-249.5 215,-295.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"274.5\" y=\"-280.3\">(None, 12, 12, 64)</text>\n",
       "<polyline fill=\"none\" points=\"215,-272.5 334,-272.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"274.5\" y=\"-257.3\">(None, 9216)</text>\n",
       "</g>\n",
       "<!-- 2423172178552&#45;&gt;2423208852448 -->\n",
       "<g class=\"edge\" id=\"edge5\"><title>2423172178552-&gt;2423208852448</title>\n",
       "<path d=\"M192,-332.366C192,-324.152 192,-314.658 192,-305.725\" fill=\"none\" stroke=\"black\"/>\n",
       "<polygon fill=\"black\" points=\"195.5,-305.607 192,-295.607 188.5,-305.607 195.5,-305.607\" stroke=\"black\"/>\n",
       "</g>\n",
       "<!-- 2423208803744 -->\n",
       "<g class=\"node\" id=\"node7\"><title>2423208803744</title>\n",
       "<polygon fill=\"none\" points=\"67,-166.5 67,-212.5 317,-212.5 317,-166.5 67,-166.5\" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"119\" y=\"-185.8\">dense_1: Dense</text>\n",
       "<polyline fill=\"none\" points=\"171,-166.5 171,-212.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"199\" y=\"-197.3\">input:</text>\n",
       "<polyline fill=\"none\" points=\"171,-189.5 227,-189.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"199\" y=\"-174.3\">output:</text>\n",
       "<polyline fill=\"none\" points=\"227,-166.5 227,-212.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"272\" y=\"-197.3\">(None, 9216)</text>\n",
       "<polyline fill=\"none\" points=\"227,-189.5 317,-189.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"272\" y=\"-174.3\">(None, 128)</text>\n",
       "</g>\n",
       "<!-- 2423208852448&#45;&gt;2423208803744 -->\n",
       "<g class=\"edge\" id=\"edge6\"><title>2423208852448-&gt;2423208803744</title>\n",
       "<path d=\"M192,-249.366C192,-241.152 192,-231.658 192,-222.725\" fill=\"none\" stroke=\"black\"/>\n",
       "<polygon fill=\"black\" points=\"195.5,-222.607 192,-212.607 188.5,-222.607 195.5,-222.607\" stroke=\"black\"/>\n",
       "</g>\n",
       "<!-- 2423208803352 -->\n",
       "<g class=\"node\" id=\"node8\"><title>2423208803352</title>\n",
       "<polygon fill=\"none\" points=\"57.5,-83.5 57.5,-129.5 326.5,-129.5 326.5,-83.5 57.5,-83.5\" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"122.5\" y=\"-102.8\">dropout_2: Dropout</text>\n",
       "<polyline fill=\"none\" points=\"187.5,-83.5 187.5,-129.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"215.5\" y=\"-114.3\">input:</text>\n",
       "<polyline fill=\"none\" points=\"187.5,-106.5 243.5,-106.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"215.5\" y=\"-91.3\">output:</text>\n",
       "<polyline fill=\"none\" points=\"243.5,-83.5 243.5,-129.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"285\" y=\"-114.3\">(None, 128)</text>\n",
       "<polyline fill=\"none\" points=\"243.5,-106.5 326.5,-106.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"285\" y=\"-91.3\">(None, 128)</text>\n",
       "</g>\n",
       "<!-- 2423208803744&#45;&gt;2423208803352 -->\n",
       "<g class=\"edge\" id=\"edge7\"><title>2423208803744-&gt;2423208803352</title>\n",
       "<path d=\"M192,-166.366C192,-158.152 192,-148.658 192,-139.725\" fill=\"none\" stroke=\"black\"/>\n",
       "<polygon fill=\"black\" points=\"195.5,-139.607 192,-129.607 188.5,-139.607 195.5,-139.607\" stroke=\"black\"/>\n",
       "</g>\n",
       "<!-- 2423209143992 -->\n",
       "<g class=\"node\" id=\"node9\"><title>2423209143992</title>\n",
       "<polygon fill=\"none\" points=\"70.5,-0.5 70.5,-46.5 313.5,-46.5 313.5,-0.5 70.5,-0.5\" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"122.5\" y=\"-19.8\">dense_2: Dense</text>\n",
       "<polyline fill=\"none\" points=\"174.5,-0.5 174.5,-46.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"202.5\" y=\"-31.3\">input:</text>\n",
       "<polyline fill=\"none\" points=\"174.5,-23.5 230.5,-23.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"202.5\" y=\"-8.3\">output:</text>\n",
       "<polyline fill=\"none\" points=\"230.5,-0.5 230.5,-46.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"272\" y=\"-31.3\">(None, 128)</text>\n",
       "<polyline fill=\"none\" points=\"230.5,-23.5 313.5,-23.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"272\" y=\"-8.3\">(None, 10)</text>\n",
       "</g>\n",
       "<!-- 2423208803352&#45;&gt;2423209143992 -->\n",
       "<g class=\"edge\" id=\"edge8\"><title>2423208803352-&gt;2423209143992</title>\n",
       "<path d=\"M192,-83.3664C192,-75.1516 192,-65.6579 192,-56.7252\" fill=\"none\" stroke=\"black\"/>\n",
       "<polygon fill=\"black\" points=\"195.5,-56.6068 192,-46.6068 188.5,-56.6069 195.5,-56.6068\" stroke=\"black\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>"
      ],
      "text/plain": [
       "<IPython.core.display.SVG object>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from IPython.display import SVG\n",
    "from keras.utils.vis_utils import model_to_dot\n",
    "\n",
    "SVG(model_to_dot(model, show_shapes=True, \n",
    "                 show_layer_names=True, rankdir='TB').create(prog='dot', format='svg'))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Compile the model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "model.compile(loss=keras.losses.categorical_crossentropy,\n",
    "              optimizer=keras.optimizers.Adadelta(),\n",
    "              metrics=['accuracy'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Train the classifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 60000 samples, validate on 10000 samples\n",
      "Epoch 1/2\n",
      "60000/60000 [==============================] - 232s - loss: 0.3500 - acc: 0.8927 - val_loss: 0.0904 - val_acc: 0.9715\n",
      "Epoch 2/2\n",
      "60000/60000 [==============================] - 235s - loss: 0.1239 - acc: 0.9642 - val_loss: 0.0584 - val_acc: 0.9817\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<keras.callbacks.History at 0x234331c4cc0>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.fit(x_train, y_train,\n",
    "          batch_size=batch_size,\n",
    "          epochs=2,\n",
    "          verbose=1,\n",
    "          validation_data=(x_test, y_test))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Predict and test model performance"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10000/10000 [==============================] - 11s    \n"
     ]
    }
   ],
   "source": [
    "score = model.evaluate(x_test, y_test, verbose=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test loss: 0.0584113781168\n",
      "Test accuracy: 0.9817\n"
     ]
    }
   ],
   "source": [
    "print('Test loss:', score[0])\n",
    "print('Test accuracy:', score[1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# How CNN Classifies an Image? "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Prepare image for CNN"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "test_image =np.expand_dims(x_test[4], axis=3)\n",
    "test_image = test_image.reshape(1,img_rows, img_cols,1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Sample Handwritten digit"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x2343582dbe0>"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x23440f7c080>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(x_test[4][:,:,0], cmap=plt.get_cmap('binary'))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Digit Label"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y_test[4]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Predict the digit"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1/1 [==============================] - 0s\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([4], dtype=int64)"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.predict_classes(test_image,batch_size=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Utility Methods to understand CNN\n",
    "+ source: https://github.com/fchollet/keras/issues/431\n",
    "+ source: https://github.com/philipperemy/keras-visualize-activations/blob/master/read_activations.py"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# https://github.com/fchollet/keras/issues/431\n",
    "def get_activations(model, model_inputs, print_shape_only=True, layer_name=None):\n",
    "    import keras.backend as K\n",
    "    print('----- activations -----')\n",
    "    activations = []\n",
    "    inp = model.input\n",
    "\n",
    "    model_multi_inputs_cond = True\n",
    "    if not isinstance(inp, list):\n",
    "        # only one input! let's wrap it in a list.\n",
    "        inp = [inp]\n",
    "        model_multi_inputs_cond = False\n",
    "\n",
    "    outputs = [layer.output for layer in model.layers if\n",
    "               layer.name == layer_name or layer_name is None]  # all layer outputs\n",
    "\n",
    "    funcs = [K.function(inp + [K.learning_phase()], [out]) for out in outputs]  # evaluation functions\n",
    "\n",
    "    if model_multi_inputs_cond:\n",
    "        list_inputs = []\n",
    "        list_inputs.extend(model_inputs)\n",
    "        list_inputs.append(1.)\n",
    "    else:\n",
    "        list_inputs = [model_inputs, 1.]\n",
    "\n",
    "    # Learning phase. 1 = Test mode (no dropout or batch normalization)\n",
    "    # layer_outputs = [func([model_inputs, 1.])[0] for func in funcs]\n",
    "    layer_outputs = [func(list_inputs)[0] for func in funcs]\n",
    "    for layer_activations in layer_outputs:\n",
    "        activations.append(layer_activations)\n",
    "        if print_shape_only:\n",
    "            print(layer_activations.shape)\n",
    "        else:\n",
    "            print(layer_activations)\n",
    "    return activations"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# https://github.com/philipperemy/keras-visualize-activations/blob/master/read_activations.py\n",
    "def display_activations(activation_maps):\n",
    "    import numpy as np\n",
    "    import matplotlib.pyplot as plt\n",
    "    \"\"\"\n",
    "    (1, 26, 26, 32)\n",
    "    (1, 24, 24, 64)\n",
    "    (1, 12, 12, 64)\n",
    "    (1, 12, 12, 64)\n",
    "    (1, 9216)\n",
    "    (1, 128)\n",
    "    (1, 128)\n",
    "    (1, 10)\n",
    "    \"\"\"\n",
    "    batch_size = activation_maps[0].shape[0]\n",
    "    assert batch_size == 1, 'One image at a time to visualize.'\n",
    "    for i, activation_map in enumerate(activation_maps):\n",
    "        print('Displaying activation map {}'.format(i))\n",
    "        shape = activation_map.shape\n",
    "        if len(shape) == 4:\n",
    "            activations = np.hstack(np.transpose(activation_map[0], (2, 0, 1)))\n",
    "        elif len(shape) == 2:\n",
    "            # try to make it square as much as possible. we can skip some activations.\n",
    "            activations = activation_map[0]\n",
    "            num_activations = len(activations)\n",
    "            if num_activations > 1024:  # too hard to display it on the screen.\n",
    "                square_param = int(np.floor(np.sqrt(num_activations)))\n",
    "                activations = activations[0: square_param * square_param]\n",
    "                activations = np.reshape(activations, (square_param, square_param))\n",
    "            else:\n",
    "                activations = np.expand_dims(activations, axis=0)\n",
    "        else:\n",
    "            raise Exception('len(shape) = 3 has not been implemented.')\n",
    "        plt.imshow(activations, interpolation='None', cmap='binary')\n",
    "        plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "----- activations -----\n",
      "(1, 26, 26, 32)\n",
      "(1, 24, 24, 64)\n",
      "(1, 12, 12, 64)\n",
      "(1, 12, 12, 64)\n",
      "(1, 9216)\n",
      "(1, 128)\n",
      "(1, 128)\n",
      "(1, 10)\n"
     ]
    }
   ],
   "source": [
    "activations = get_activations(model, test_image)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Displaying activation map 0\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x234400795c0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Displaying activation map 1\n"
     ]
    },
    {
     "data": {
      "image/png": "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\noPwPF+0uacjtQZsAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2344003a358>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Displaying activation map 2\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x23440017d68>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Displaying activation map 3\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2344016cd30>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Displaying activation map 4\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nrkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2344007b3c8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Displaying activation map 5\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x23440008908>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Displaying activation map 6\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x234333e7f98>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Displaying activation map 7\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nu47eG5rB1QAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x23440f6a0b8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "display_activations(activations)"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
